#ifndef CHATMESSAGEMODEL_H
#define CHATMESSAGEMODEL_H

#include <QAbstractListModel>
#include <QObject>
#include <QVector>

/**
 * 聊天消息数据模型
 * 继承自QAbstractListModel，用于管理聊天记录数据
 */

class ChatMessageModel : public QAbstractListModel
{
    Q_OBJECT
public:
    // 自定义数据角色（用于标识不同类型的数据）
    enum Role
    {
        SenderRole = Qt::UserRole + 1,  // 发送者标识
        ContentRole,                    // 消息内容
        TimestampRole,                  // 时间戳
        AvatarRole,                     // 头像路径
        IsSendRole,                     // 是否是自己发送的消息
        MsgTypeRole                     // 消息类型（文字/图片/文件等）
    };

    // 消息数据结构体
    struct ChatMessage
    {
        QString content;                // 消息内容（文字内容或图片路径）
        qint64 timestamp;               // 消息时间戳（毫秒级）
        QString avatarPath;             // 头像文件路径
        bool isSend;                    // true=发送方消息，false=接收方消息
        int msgType;                    // 0=文字消息，1=图片消息，2=文件等
    };

    explicit ChatMessageModel(QObject *parent = nullptr);

    // 返回数据行数（必须实现的虚函数）
    int rowCount(const QModelIndex&) const override;

    // 返回指定索引的数据（必须实现的虚函数）
    QVariant data(const QModelIndex &index, int role) const override;

    // 添加新消息到模型
    void addMessage(const ChatMessage &message);

    bool setData(const QModelIndex &index, const QVariant &value, int role) override;

    void updateMessageContent(int row, const QString &newContent);

private:
    QVector<ChatMessage> m_Messages; // 存储所有消息的容器
};

#endif // CHATMESSAGEMODEL_H
